package edu.ucue.ECU.dao;

import edu.ucue.ECU.exp.ActualizarDatosEntidadException;
import edu.ucue.ECU.exp.BuscarDatosEntidadException;
import edu.ucue.ECU.exp.BuscarDatosResponsableException;
import edu.ucue.ECU.exp.EliminarDatosEntidadException;
import edu.ucue.ECU.exp.GuardarDatosEntidadException;
import edu.ucue.ECU.ngc.Entidad;
import edu.ucue.ECU.ngc.Responsable;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

public class EntidadDB {

    public void grabar(Entidad miEntidad) throws GuardarDatosEntidadException  {
        try {
            Conexion data=Conexion.getInstance();
            Connection var=data.getConexion();
            Statement stmt = var.createStatement();
            stmt.execute("insert into \"Entidad\" (\"nombreEntidad\") values('" + miEntidad.getNombre()+ "')");
            var.close();
        } catch (SQLException ex) {
            throw new GuardarDatosEntidadException("Se produjo un error inesperado al guardar los datos de entidad");
        }
    }
    
    
    public void modificar(Entidad miEntidad) throws ActualizarDatosEntidadException  {
        try {
            Conexion data=Conexion.getInstance();
            Connection var=data.getConexion();
            Statement stmt = var.createStatement();
            String consulta="update \"Entidad\" set nombre='" + miEntidad.getNombre() + "'where \"idEntidad\"=" + miEntidad.getIdEntidad();
            stmt.executeUpdate(consulta);
            var.close();
        } catch (SQLException ex) {
            throw new ActualizarDatosEntidadException("Se produjo un error inesperado al actualizar los datos de entidad");
        }
    }
    
    public void eliminar(Entidad miEntidad) throws EliminarDatosEntidadException {
        try {
            Conexion data=Conexion.getInstance();
            Connection var=data.getConexion();
            Statement stmt = var.createStatement();
            String consulta="delete \"Entidad\" where \"idEntidad\"=" + miEntidad.getIdEntidad();
            stmt.executeUpdate(consulta);
            var.close();
        } catch (SQLException ex) {
            throw new EliminarDatosEntidadException("Se produjo un error inesperado al eliminar los datos de entidad");
        }
    }
    public void buscar(Entidad miEntidad) throws BuscarDatosEntidadException  {
        try {
            Conexion data=Conexion.getInstance();
            Connection var=data.getConexion();
            Statement stmt = var.createStatement();
            String consulta="select * from \"Entidad\" where \"nombreEntidad\" ='" + miEntidad.getNombre() + "'";
            ResultSet resultado = stmt.executeQuery(consulta);
            if (resultado!=null) {
                resultado.next();
                miEntidad.setIdEntidad(resultado.getInt("idEntidad"));
            }
            var.close();
        } catch (SQLException ex) {
            throw new BuscarDatosEntidadException("Se produjo un error inesperado al buscar los datos de Entidad");
        }
    }
    
    public Responsable buscarResponsable(Entidad miEntidad) throws BuscarDatosResponsableException  {
        try {
            Responsable responsable=null;
            Conexion data=Conexion.getInstance();
            Connection var=data.getConexion();
            Statement stmt = var.createStatement();
            String consulta="select \"CI\",\"nombre\",\"telefono\",\"correo\" from \"Entidad\"natural join \"Responsable\" natural join \"EntidadResponsable\" where \"CI\"=\"CIResponsable\" and \"idEntidad\" ='" + miEntidad.getIdEntidad() + "'";
            System.out.println(consulta);
            ResultSet resultado = stmt.executeQuery(consulta);
            if (resultado.next()) {
                responsable=new Responsable();
                responsable.setCedula(resultado.getString("CI"));
                responsable.setNombre(resultado.getString("nombre"));
                responsable.setTelefonos(resultado.getString("telefono"));
                responsable.setCorreos(resultado.getString("correo"));
            }
            var.close();
            return responsable;
        } catch (SQLException ex) {
            throw new BuscarDatosResponsableException("Se produjo un error inesperado al buscar los datos de responsable");
        }
    }
    
      public ArrayList listar() throws BuscarDatosEntidadException {
        try {
            ArrayList todos=new ArrayList();
            Conexion data=Conexion.getInstance();
            Connection var=data.getConexion();
            Statement stmt = var.createStatement();
            ResultSet resultado = stmt.executeQuery("select * from \"Entidad\"");
            while (resultado.next()) {
                Entidad miEntidad = new Entidad();
                miEntidad.setIdEntidad(resultado.getInt("idEntidad"));
                miEntidad.setNombre(resultado.getString("nombreEntidad"));
                todos.add(miEntidad);
            }var.close();
            return todos;
        } catch (SQLException ex) {
            throw new BuscarDatosEntidadException("Se produjo un error inesperado al buscar los datos de entidad");
        }
    }

}
